package com.oa.cms.utils;

import java.util.regex.Pattern;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;

/**
 * 正则工具类
 * 当需要用正则验证时使用
 * Created by gold-jx on 2017/12/7.
 */
public class RegexUtil {

    /**
     * 验证字符串只能是字母+数字的组合
     */
    private final static String LOTT_AND_NUM = "^[A-Za-z0-9_]+$";
    private final static String ONLY_LOTT_AND_NUM = "^[A-Za-z0-9]+$";

    /**
     * 验证字符串包含多个点
     */
    private final static  String MANY_POINT="^[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";




    public static boolean matchNumOrLetter(String str) {
        return match(str, ONLY_LOTT_AND_NUM);
    }

    public static boolean matchManyPoint(String str) {
        return match(str, MANY_POINT);
    }

    /**
     * 验证真实姓名只能是中文
     * @param text 文本
     * @return 是否全中文
     */
    public  static boolean isChinese(String text){
        return match(text, "^[\u4e00-\u9fa5]+$");
    }
    public  static boolean isUrl(String text){
        return match(text, "^((http|https)://)?([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?$");
    }

    public static void assertUrl(String text,String msg){
        if(!StringUtils.isEmpty(text)) {
            Assert.isTrue(RegexUtil.isUrl(text), msg);
        }
    }
    public static void assertChinese(String text,String msg){
        if(!StringUtils.isEmpty(text)) {
            Assert.isTrue(RegexUtil.isChinese(text), msg);
        }
    }

    /**
     * 验证包含多点格式
     */
    public static void assertManyPoint(String text,String msg){
        if(!StringUtils.isEmpty(text)) {
            Assert.isTrue(RegexUtil.matchManyPoint(text),msg);
        }
    }

    /**
     * 正则表达式匹配
     *
     * @param text 待匹配的文本
     * @param reg 正则表达式
     */
    private static boolean match(String text, String reg) {
        return !(StringUtils.isEmpty(text) || StringUtils.isEmpty(reg)) && Pattern.compile(reg).matcher(text).matches();
    }


}
